<?php
/**
 *
 * RIPS - PHP脚本漏洞静态源代码分析软件(Johannes Dahse @rub.de)版权所有(C) 2012
 * 您可以根据自由软件基金会发布的GNU通用公共许可证条款重新发布和/或修改它;
 * 许可的版本3，或者(由您选择)任何以后的版本。
 * 这个程序是希望它会有用，但没有任何保证;
 * 甚至没有对适销性或适合特定用途的隐含保证。
 * 有关更多细节，请参阅GNU通用公共许可证。
 * 您应该已经收到一份GNU通用公共许可证的副本，连同本程序;
 * 如果没有，请查看<http://www.gnu.org/licenses/>
 **/

$HELP_XSS = array(
    'description' => '攻击者可以在客户端浏览器上下文中使用此安全漏洞执行任意的HTML/JavaScript代码。用户受污染的数据由应用程序嵌入到HTML输出中，并由用户浏览器呈现，从而允许攻击者嵌入和呈现恶意代码。准备恶意链接将导致在单击链接时在其他用户的浏览器上下文中执行此恶意代码。这可能导致本地网站毁损、网络钓鱼或cookie窃取和会话劫持。',
    'link' => 'https://www.owasp.org/index.php/XSS',
    'code' => '<?php print("Hello " . $_GET["name"]); ?>',
    'poc' => '/index.php?name=<script>alert(1)</script>',
    'patchtext' => '在将数据嵌入到输出之前，使用PHP内置函数对所有用户受污染的数据进行编码。确保设置参数ENT_QUOTES以避免对现有HTML属性的eventhandler注入，并指定正确的字符集。',
    'patch' => '<?php print("Hello " . htmlentities($_GET["name"], ENT_QUOTES, "utf-8"); ?>'
);

$HELP_HTTP_HEADER = array(
    'description' => '攻击者可以向HTTP响应头中注入任意头。当注入“Location:”头信息时，这可能被滥用于重定向，或者在会话固定攻击中添加“Set-Cookie:”头信息时，被滥用于帮助。此外，HTTP响应可以被覆盖，JavaScript可以被注入，从而导致跨站点脚本攻击。在低于4.4.2或5.1.2的PHP版本中，字符\n\r (LF CR)可用于头行终止(跨浏览器)。在PHP 5.4以下字符\r (CR)仍然可以用于头行终止(Chrome, IE) ', 'link' => 'https://www.owasp.org/index.php/HTTP_Response_Splitting',
    'code' => '<?php header("Location: ".$_GET["url"]); ?>',
    'poc' => '/index.php?url=a%0a%0dContent-Type:%20text/html%0a%0d%0a%0d<script>alert(1)</script>',
    'patchtext' => '更新PHP以防止头文件注入或实现白名单。',
    'patch' => '<?php if(!in_array($_GET["url"], $whitelist)) exit; ?>'
);

$HELP_SESSION_FIXATION = array(
    'description' => '攻击者可以强制用户使用特定的会话id。一旦用户登录，攻击者就可以使用之前固定的会话id访问帐户。',
    'link' => 'https://www.owasp.org/index.php/Session_fixation',
    'code' => '<?php setcookie("PHPSESSID", $_GET["sessid"]); ?>',
    'poc' => '/index.php?sessid=1f3870be274f6c49b3e31a0c6728957f',
    'patchtext' => '不要使用用户提供的会话令牌。',
    'patch' => 'No code.'
);

$HELP_CODE = array(
    'description' => '攻击者可以使用此漏洞执行任意PHP代码。用户受污染的数据被嵌入到一个函数中，该函数在运行时编译并执行PHP代码，从而允许攻击者注入自己的将被执行的PHP代码。这个漏洞可能会导致整个服务器崩溃。', 'link' => 'https://www.owasp.org/index.php/Code_Injection',
    'code' => '<?php eval("\$color = \'" . $_GET["color"] . "\';"); ?>',
    'poc' => '/index.php?color=\';phpinfo();//',
    'patchtext' => '用正则表达式(例如只使用字母数字)或数组为正代码构建白名单。不要试图把邪恶的PHP代码列入黑名单',
    'patch' => '<?php $colors = array("blue", "red"); if(!in_array($_GET["color"], $colors)) exit; ?>'
);

$HELP_REFLECTION = array(
    'description' => '攻击者可能使用此漏洞执行任意函数。用户受污染数据用作函数名。这可能会导致应用程序出现意外行为。',
    'link' => 'https://www.owasp.org/index.php/Reflection_injection',
    'code' => '<?php call_user_func($_GET["func"]); ?>',
    'poc' => '/index.php?func=phpinfo',
    'patchtext' => '为允许的函数构建一个白名单。',
    'patch' => '<?php $funcs = array("test1", "test2"); if(!in_array($_GET["func"], $funcs)) exit; ?>'
);

$HELP_FILE_INCLUDE = array(
    'description' => '攻击者可能包含本地或远程PHP文件，或读取具有此漏洞的非PHP文件。在创建将包含在当前文件中的文件名时使用用户受污染数据。将计算此文件中的PHP代码，非PHP代码将嵌入到输出中。这个漏洞可能会导致整个服务器崩溃。', 'link' => 'http://websec.wordpress.com/2010/02/22/exploiting-php-file-inclusion-overview/',
    'code' => '<?php include("includes/" . $_GET["file"]); ?>',
    'poc' => '/index.php?file=../../../../../../../etc/passwd',
    'patchtext' => '为正文件名建立一个白名单。不要只将文件名限制为特定路径或扩展名。',
    'patch' => '<?php $files = array("index.php", "main.php"); if(!in_array($_GET["file"], $files)) exit; ?>'
);

$HELP_FILE_READ = array(
    'description' => '攻击者可能使用此漏洞读取本地文件。当创建将被打开和读取的文件名时，会使用用户受污染的数据，因此允许攻击者读取web服务器上的源代码和其他可能导致新的攻击向量的任意文件。例如，攻击者可以检测到源代码文件中的新漏洞或读取用户凭证。', 'link' => '',
    'code' => '<?php echo file_get_contents("files/" . $_GET["file"]); ?>',
    'poc' => '/index.php?file=../../../../../../../etc/passwd',
    'patchtext' => '为正文件名建立一个白名单。不要只将文件名限制为特定路径或扩展名。',
    'patch' => '<?php $files = array("index.php", "main.php"); if(!in_array($_GET["file"], $files)) exit; ?>'
);

$HELP_FILE_AFFECT = array(
    'description' => '攻击者可以使用此漏洞写入任意文件或将任意代码注入到文件中。当创建要打开的文件名或创建要写入文件的字符串时，将使用用户受污染数据。攻击者可以尝试在PHP文件中编写任意PHP代码，从而完全攻击服务器。', 'link' => '',
    'code' => '<?php $h = fopen($_GET["file"], "w"); fwrite($h, $_GET["data"]); ?>',
    'poc' => '/index.php?file=shell.php&data=<?php phpinfo();?>',
    'patchtext' => '为正文件名建立一个白名单。不要只将文件名限制为特定路径或扩展名。如果您将代码写入PHP文件，请确保攻击者不能编写自己的PHP代码。使用带有数组或正则表达式的白名单(例如只使用字母数字)。',
    'patch' => '<?php $files = array("index.php", "main.php"); if(!in_array($_GET["file"], $files)) exit; ?>'
);

$HELP_EXEC = array(
    'description' => '攻击者可以使用此漏洞写入任意文件或将任意代码注入到文件中。当创建要打开的文件名或创建要写入文件的字符串时，将使用用户受污染数据。攻击者可以尝试在PHP文件中编写任意PHP代码，从而完全攻击服务器。', 'link' => '',
    'code' => '<?php exec("./crypto -mode " . $_GET["mode"]); ?>',
    'poc' => '/index.php?mode=1;sleep 10;',
    'patchtext' => '将代码限制为非常严格的字符子集，或者构建允许命令的白名单。不要试图过滤邪恶的命令。尽可能避免使用系统命令执行功能。',
    'patch' => '<?php $modes = array("r", "w", "a"); if(!in_array($_GET["mode"], $modes)) exit; ?>'
);

$HELP_DATABASE = array(
    'description' => '攻击者可以使用此漏洞在数据库服务器上执行任意SQL命令。在创建将在数据库管理系统(DBMS)上执行的数据库查询时使用用户受污染数据。攻击者可以注入自己的SQL语法，从而启动读取、插入或删除数据库条目，或攻击底层操作系统，这取决于查询、DBMS和配置。', 'link' => 'https://www.owasp.org/index.php/SQL_Injection',
    'code' => '<?php mysql_query("SELECT * FROM users WHERE id = " . $_GET["id"]); ?>',
    'poc' => '/index.php?id=1 OR 1=1-- -',
    'patchtext' => '始终将需要的字符串嵌入到引号中，并在将字符串嵌入查询之前使用PHP内置函数对其进行转义。始终嵌入不带引号的期望整数，并在将数据嵌入到查询之前将其类型转换为整数。转义数据但不带引号地嵌入数据是不安全的。',
    'patch' => '<?php mysql_query("SELECT * FROM users WHERE id = " . (int)$_GET["id"]); ' . "\n" . ' mysql_query("SELECT * FROM users WHERE name = \'" . mysql_real_escape_string($_GET["name"]) . "\'"); ?>'
);

$HELP_XPATH = array(
    'description' => '攻击者可以使用此漏洞执行任意XPath表达式。在创建将在XML资源上执行的XPath表达式时，将使用用户受污染的数据。攻击者可以注入自己的XPath语法来读取任意的XML条目。', 'link' => 'http://packetstormsecurity.org/files/view/33380/Blind_XPath_Injection_20040518.pdf',
    'code' => '<?php $ctx->xpath_eval("//user[name/text()=\'" . $_GET["name"] . "\']/account/text()"); ?>',
    'poc' => '/index.php?name=\' or \'\'=\'',
    'patchtext' => '在将字符串嵌入到表达式之前，一定要将需要的字符串嵌入到引号中，并使用PHP内置函数对字符串进行转义。始终嵌入不带引号的期望整数，并在将数据嵌入到表达式之前将其类型转换为整数。转义数据但不带引号地嵌入数据是不安全的。',
    'patch' => '<?php $ctx->xpath_eval("//user[name/text()=\'" . addslashes($_GET["name"]) . "\']/account/text()"); ?>'
);

$HELP_LDAP = array(
    'description' => '攻击者可以使用此漏洞执行任意LDAP表达式。在创建将在LDAP服务器上执行的LDAP筛选器时使用用户受污染数据。攻击者可以注入自己的LDAP语法来读取任意LDAP条目。', 'link' => 'http://www.blackhat.com/presentations/bh-europe-08/Alonso-Parada/Whitepaper/bh-eu-08-alonso-parada-WP.pdf',
    'code' => '<?php ldap_search($ds, $dn, "(&(sn=person)(person=".$_GET["person"]."))"); ?>',
    'poc' => '/index.php?person=*',
    'patchtext' => '在LDAP中，期望的字符串没有嵌入到引号中。将输入字符集限制为字母数字(如果可能)，以防止过滤器语法的注入。',
    'patch' => '<?php if(!preg_match(\'/^[a-z0-9]+$/\', $_GET["person"])) exit; ?>'
);

$HELP_CONNECT = array(
    'description' => '攻击者可能会更改使用此漏洞传输的连接处理参数或数据。用户受污染的数据是在选择参数或创建将被传输的数据时使用的，从而允许攻击者更改它们。根据连接的类型，这可能会导致进一步的攻击。”', 'link' => '',
    'code' => 'Can not be generalized.',
    'poc' => 'Can not be generalized.',
    'patchtext' => '不能一概而论。',
    'patch' => 'Can not be generalized.'
);

$HELP_POP = array(
    'description' => '当unserialize()函数解析userinput时，攻击者可能会通过提供将在当前应用程序范围中使用的序列化对象来滥用它。这些对象只能是此应用程序的类的实例。当对象在反序列化期间复活时，这些类的一些小工具，如摔伤()或摔伤()函数将被自动调用，而攻击者指定的对象变量可能会导致这些小工具的漏洞。', 'link' => 'https://media.blackhat.com/bh-us-10/presentations/Esser/BlackHat-USA-2010-Esser-Utilizing-Code-Reuse-Or-Return-Oriented-Programming-In-PHP-Application-Exploits-slides.pdf',
    'code' => '<?php
class foo { 
	public $file = "test.txt";
	public $data = "text"; 
	function __destruct() 
	{ 
		file_put_contents($this->file, $this->data); 
	} 
} 
$a = unserialize($_GET["s"]);
?>',
    'poc' => '/index.php?s=O:3:"foo":2:{s:4:"file";s:9:"shell.php";s:4:"data";s:29:"<?php passthru($_GET["c"]);?>";}',
    'patchtext' => '防止使用unserialize，因为它包含更多的缺陷。',
    'patch' => 'No code.'
);
?>